package io;

import java.io.*;
import java.util.Scanner;

public class Demo7 {
    //进行普通文件的复制
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要复印的文件（绝对路径或相对路径）:");
        String srcPath = scanner.nextLine();
        File srcFile = new File(srcPath);
        // 判断文件是否存在
        if(!srcFile.exists()) {
            System.out.println("文件不存在，请确认路径是否正确 !");
            return;
        }
        // 判断文件是否为 普通文件
        if(!srcFile.isFile()) {
            System.out.println("该文件不是普通文件，请确认文件名是否正确 !");
            return;
        }
        // 进行文件复制操作
        copyFile(srcFile);
    }

    private static void copyFile(File srcfile) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入文件复制到的目标路径:");
        String destPath = scanner.next();
        File destFile = new File(destPath);
        // 检查目标文件路径的合法性
        if(destFile.exists()) {
            // 文件路径为目录
            if(destFile.isDirectory()) {
                System.out.println("目标文件路径已存在，并且是一个目录，请确认路径是否正确 !");
                return;
            }
            // 文件路径已存在这个普通文件，对该文件 进行覆盖或者取消复制
            if(destFile.isFile()) {
                System.out.println("目标文件路径已存在，请确认是否对文件内容进行覆盖:Y/N(忽视大小写)");
                String choice = scanner.next();
                if(!choice.equals("Y") && !choice.equals("y")) {
                    System.out.println("文件复制取消 !");
                    return;
                }
            }
        }

        // 文件不存在，先创建一个文件
        destFile.createNewFile();
        // 复制文件
        try (OutputStream os = new FileOutputStream(destFile)){
            try (InputStream is = new FileInputStream(srcfile)) {
                byte[] arr = new byte[1024];
                int len = 0;
                while(true) {
                    len = is.read(arr);
                    if(len == -1) {
                        break;
                    }
                    os.write(arr,0, len);
                    os.flush();
                }
                System.out.println("复制成功 !");
            }
        }
    }

}
